const jwt = require('jsonwebtoken');
const bcrypt = require('bcryptjs');
const pool = require('../database/pool');
const User = require('../models/User');

// 管理员账号配置
const ADMIN_USERNAME = 'admin';
const ADMIN_PASSWORD = 'admin123';

// 登录
const login = async (req, res) => {
  try {
    const { username, password, role } = req.body; // 获取role参数
    console.log('登录请求:', { username, role });

    // 检查是否是管理员登录
    if (username === ADMIN_USERNAME) {
      if (password === ADMIN_PASSWORD) {
        if (role !== 'admin') {
          return res.status(403).json({ message: '管理员账号只能以管理员身份登录' });
        }
        // 生成管理员token
        const token = jwt.sign(
          { 
            id: 0, 
            username: ADMIN_USERNAME,
            role: 'admin'
          },
          process.env.JWT_SECRET || 'your-secret-key',
          { expiresIn: '24h' }
        );

        return res.json({
          token,
          user: {
            id: 0,
            username: ADMIN_USERNAME,
            name: '管理员',
            role: 'admin'
          }
        });
      } else {
        return res.status(401).json({ message: '用户名或密码错误' });
      }
    }

    // 查询用户
    const safeUsername = username !== undefined ? username : null;
    const [users] = await pool.execute(
      'SELECT * FROM users WHERE username = ?',
      [safeUsername]
    );

    if (users.length === 0) {
      return res.status(401).json({ message: '用户名或密码错误' });
    }

    const user = users[0];

    // 验证密码
    const isValidPassword = await bcrypt.compare(password, user.password);
    if (!isValidPassword) {
      return res.status(401).json({ message: '用户名或密码错误' });
    }

    // 检查请求的角色与数据库中的角色是否匹配
    if (role && user.role !== role) {
        return res.status(403).json({ message: `此账号为${user.role === 'admin' ? '管理员' : '用户'}账号，无法以${role === 'admin' ? '管理员' : '用户'}身份登录` });
    }

    // 生成 JWT token
    const token = jwt.sign(
      { 
        id: user.id, 
        username: user.username,
        role: user.role
      },
      process.env.JWT_SECRET || 'your-secret-key',
      { expiresIn: '24h' }
    );

    res.json({
      token,
      user: {
        id: user.id,
        username: user.username,
        name: user.name,
        role: user.role
      }
    });
  } catch (error) {
    console.error('登录错误:', error.stack);
    res.status(500).json({ message: '服务器错误' });
  }
};

// 注册
const register = async (req, res) => {
  try {
    const { username, password, name } = req.body;
    console.log('注册请求:', { username, name });

    // 检查用户名是否已存在
    const [existingUsers] = await pool.execute(
      'SELECT * FROM users WHERE username = ?',
      [username]
    );

    if (existingUsers.length > 0) {
      console.log('用户名已存在');
      return res.status(400).json({ message: '用户名已存在' });
    }

    // 加密密码
    const hashedPassword = await bcrypt.hash(password, 10);
    console.log('密码加密完成');

    // 创建新用户（默认为普通用户）
    const [result] = await pool.execute(
      'INSERT INTO users (username, password, name, role) VALUES (?, ?, ?, ?)',
      [username, hashedPassword, name || username, 'user']
    );

    console.log('用户创建成功:', result);
    res.status(201).json({ message: '注册成功' });
  } catch (error) {
    console.error('注册错误:', error.stack);
    res.status(500).json({ message: '服务器错误' });
  }
};

module.exports = {
  login,
  register
}; 